package com.java.second_goods.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.java.second_goods.common.utils.StringUtils;
import com.java.second_goods.entity.Chef;
import com.java.second_goods.mapper.ChefMapper;
import com.java.second_goods.service.ChefService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;

/**
 * 厨师 服务层实现
 */
@Service
public class ChefServiceImpl extends ServiceImpl<ChefMapper, Chef> implements ChefService {

    @Autowired
    private ChefMapper chefMapper;

    /**
     * 查询厨师信息
     *
     * @param id 厨师ID
     * @return 厨师信息
     */
    @Override
    public Chef selectChefById(Integer id) {
        return chefMapper.selectById(id);
    }

    /**
     * 查询厨师列表
     *
     * @param chef 厨师信息
     * @return 厨师集合
     */
    @Override
    public List<Chef> selectChefList(Chef chef) {
        LambdaQueryWrapper<Chef> queryWrapper = new LambdaQueryWrapper<>();
        if (chef != null) {
            // 构建查询条件
            if (StringUtils.isNotEmpty(chef.getName())) {
                queryWrapper.like(Chef::getName, chef.getName());
            }
            if (StringUtils.isNotEmpty(chef.getSpecialty())) {
                queryWrapper.like(Chef::getSpecialty, chef.getSpecialty());
            }
            if (chef.getCategoryId() != null) {
                queryWrapper.eq(Chef::getCategoryId, chef.getCategoryId());
            }
            if (chef.getStatus() != null) {
                queryWrapper.eq(Chef::getStatus, chef.getStatus());
            }
            if (chef.getIsPopular() != null) {
                queryWrapper.eq(Chef::getIsPopular, chef.getIsPopular());
            }
        }
        return chefMapper.selectList(queryWrapper);
    }

    /**
     * 查询热门厨师列表
     *
     * @param limit 限制数量
     * @return 厨师列表
     */
    @Override
    public List<Chef> selectPopularChefs(Integer limit) {
        return chefMapper.selectPopularChefs(limit);
    }

    /**
     * 根据菜系ID查询厨师列表
     *
     * @param categoryId 菜系ID
     * @return 厨师列表
     */
    @Override
    public List<Chef> selectChefsByCategoryId(Integer categoryId) {
        return chefMapper.selectChefsByCategoryId(categoryId);
    }

    /**
     * 新增厨师
     *
     * @param chef 厨师信息
     * @return 结果
     */
    @Override
    public int insertChef(Chef chef) {
        // 设置默认值
        if (chef.getStatus() == null) {
            chef.setStatus(1);
        }
        if (chef.getRating() == null) {
            chef.setRating(new BigDecimal("5.0"));
        }
        if (chef.getIsPopular() == null) {
            chef.setIsPopular(false);
        }
        if (chef.getExperience() == null) {
            chef.setExperience(0);
        }
        return chefMapper.insert(chef);
    }

    /**
     * 修改厨师
     *
     * @param chef 厨师信息
     * @return 结果
     */
    @Override
    public int updateChef(Chef chef) {
        return chefMapper.updateById(chef);
    }

    /**
     * 删除厨师信息
     *
     * @param id 厨师ID
     * @return 结果
     */
    @Override
    public int deleteChefById(Integer id) {
        return chefMapper.deleteById(id);
    }

    /**
     * 批量删除厨师信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteChefByIds(Integer[] ids) {
        return chefMapper.deleteBatchIds(Arrays.asList(ids));
    }

    /**
     * 更新厨师评分
     *
     * @param chefId 厨师ID
     * @param rating 评分
     * @return 结果
     */
    @Override
    public int updateChefRating(Integer chefId, Double rating) {
        return chefMapper.updateChefRating(chefId, rating);
    }

    /**
     * 设置厨师热门状态
     *
     * @param chefId 厨师ID
     * @param isPopular 是否热门
     * @return 结果
     */
    @Override
    public int setChefPopular(Integer chefId, Boolean isPopular) {
        Chef chef = new Chef();
        chef.setId(chefId);
        chef.setIsPopular(isPopular);
        return chefMapper.updateById(chef);
    }
}